Метод Ньютона для розв’язування систем нелінійних рівнянь

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2007
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Алгоритмічні основи криптології
Група:
ІБ – 44

Частина тексту файла

Міністерство освіти та науки України Національний університет “Львівська політехніка” Звіт про виконання лабораторної роботи №3 з курсу “Алгоритмічні основи криптології” на тему: “ Метод Ньютона для розв’язування систем нелінійних рівнянь ” Мета роботи: ознайомитися з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона. Завдання: написати програму на мові програмування Сі яка б розв’язувала систему нелінійних рівнянь методом Ньютона без обертання матриці, розв’язок матриці методом LU-розкладу, а обчислення похідних методом кінцевих різниць. x1 = x12 – x22 – 0.1 , x2 = 2x1x2 + 0.1 , x10 = 0, x20 = 0 Блок – схема алгоритму роботи програми    Блок-схема функції fynct  Текст програми: #include <stdio.h> #include <math.h> #include <conio.h> #define n 2 const int g=1; const double e=0.00001; const double h=0.00000001; double fynct(double *x, int j) { if (j==0) return (x[0]-x[0]*x[0]-x[1]*x[1]+0.1); else return (x[1]-2*x[0]*x[1]-0.1); } main() { double x1[n],x2[n],f[n],jac[n][n]; int i,j,k,m; double s,s1,max; for(i=0;i<n;i++) x2[i]=x1[i]=0; do { //Kintsevux poxidnuh for(i=0;i<n;i++) for(j=0;j<n;j++) { f[i]=-fynct(x1,i); x2[j]+=h; jac[i][j]=(fynct(x2,i)-fynct(x1,i))/h; x2[j]-=h; } //Rozvjaz metodom LU jac[0][1]/=jac[0][0]; f[0]/=jac[0][0]; for(k=1;k<n;k++) { for(i=k;i<n;i++) for(m=0;m<=k-1;m++) jac[i][k]-=jac[i][m]*jac[m][k]; if (k==(n-1)) goto g; for(j=k+1;j<n;j++) { s1=0; for(m=0;m<=k-1;m++) s1+=jac[k][m]*jac[m][j]; jac[k][j]=(jac[k][j]-s1)/jac[k][k]; } g: s=0; for(m=0;m<=k-1;m++) s+=jac[k][m]*f[m]; f[k]=(f[k]-s)/jac[k][k]; } for(i=0;i<n;i++) x2[i]=0; x2[n-1]=f[n-1]; for(i=n-2;i>=0;i--) { s=0; for(m=i+1;m<n;m++) s+=jac[i][m]*x2[m]; x2[i]=f[i]-s; } max=fabs((x2[0])/x1[0]); for(i=1;i<n;i++) if (max<fabs(x2[i]/x1[i])) max=fabs((x2[i])/x1[i]); for(i=0;i<n;i++) x1[i]+=x2[i]; } while (max>=e); printf("Results:\n"); for(i=0;i<n;i++) printf("x%d=%lf\n",i+1,x1[i]); getchar(); printf("Perevirka:\n"); for(i=0;i<n;i++) printf("%lf\n",fabs(fynct(x1,i))); getchar(); } Результат виконання програми:  Висновок: Розв’язання систем нелінійних алгебраїчних рівнянь методом Ньютона можна досить легко реалізувати на ЕОМ за допомогою програми в середовищі Сі. Розв’язання таких систем на ЕОМ є дуже актуальним, оскільки цей процес є набагато легшим та короткотривалішим ніж розв’язання систем нелінійних рівнянь вручну.
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини